home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / include / compiz / compiz-animationaddon.h < prev    next >
C/C++ Source or Header  |  2009-10-22  |  8KB  |  224 lines

  1. #ifndef _COMPIZ_ANIMATIONADDON_H
  2. #define _COMPIZ_ANIMATIONADDON_H
  3.  
  4. #define ANIMATIONADDON_ABIVERSION 20081023
  5.  
  6.  
  7. // Polygon tesselation type: Rectangular, Hexagonal
  8. typedef enum
  9. {
  10.     PolygonTessRect = 0,
  11.     PolygonTessHex,
  12.     PolygonTessGlass
  13. } PolygonTess;
  14. #define LAST_POLYGON_TESS 2
  15.  
  16. // This is intended to be a closed 3D piece of a window with convex polygon
  17. // faces and quad-strip sides. Since decoration texture is separate from
  18. // the window texture, it is more complicated than it would be with a single
  19. // texture: we use glClipPlane with the rectangles (clips) to clip 3D space
  20. // to the region falling within that clip.
  21. // If the polygon is on an edge/corner, it also has 2D shadow quad(s)
  22. // (to be faded out at the beginning of 3D animation if necessary).
  23. typedef struct _PolygonObject
  24. {
  25.     int nVertices;                // number of total vertices (front + back)
  26.     int nSides;                    // number of sides
  27.     GLfloat *vertices;            // Positions of vertices relative to center
  28.     GLushort *sideIndices;        // Indices of quad strip for "sides"
  29.     GLfloat *normals;            // Surface normals for 2+nSides faces
  30.  
  31.     Box boundingBox;            // Bound. box to test intersection with clips
  32.  
  33.     // Animation effect parameters
  34.  
  35.     Point3d centerPosStart;        // Starting position of center
  36.     float rotAngleStart;        // Starting rotation angle
  37.  
  38.     Point3d centerPos;            // Position of center
  39.     Vector3d rotAxis;            // Rotation axis vector
  40.     float rotAngle;                // Rotation angle
  41.     Point3d rotAxisOffset;        // Rotation axis translate amount
  42.  
  43.     Point centerRelPos;            // Relative pos of center within the window
  44.  
  45.     Vector3d finalRelPos;        // Velocity factor for scripted movement
  46.     float finalRotAng;            // Final rotation angle around rotAxis
  47.  
  48.     float moveStartTime;        // Movement starts at this time ([0-1] range)
  49.     float moveDuration;            // Movement lasts this long     ([0-1] range)
  50.  
  51.     float fadeStartTime;        // Fade out starts at this time ([0,1] range)
  52.     float fadeDuration;            // Duration of fade out         ([0,1] range)
  53.  
  54.     void *effectParameters;             /* Pointer to a struct that can contain
  55.                        custom parameters for an individual effect */
  56.  
  57.     float boundSphereRadius;            // Radius of bounding sphere
  58. } PolygonObject;
  59.  
  60. typedef struct _Clip4Polygons    // Rectangular clips
  61. {                // (to hold clips passed to AddWindowGeometry)
  62.     int id;            // clip id (what number this clip is among
  63.     // passed clips)
  64.     Box box;            // Coords
  65.     Boxf boxf;            // Float coords (for small clipping adjustment)
  66.     CompMatrix texMatrix;    // Corresponding texture coord. matrix
  67.     int *intersectingPolygons;
  68.     int nIntersectingPolygons;    // Clips (in PolygonSet) that intersect
  69.     GLfloat *polygonVertexTexCoords;
  70.     // Tex coords for each intersecting polygon and for each vertex
  71.     // ordered as p1.v1.x, p1.v1.y, p1.v2.x, p1.v2.y, p2.v1.x, p2.v1.y, ...
  72. } Clip4Polygons;
  73.  
  74. typedef enum
  75. {
  76.     CorrectPerspectiveNone = 0,
  77.     CorrectPerspectivePolygon,
  78.     CorrectPerspectiveWindow
  79. } CorrectPerspective;
  80.  
  81. typedef struct _PolygonSet    // Polygon objects with same thickness
  82. {
  83.     int nClips;            // Rect. clips collected in AddWindowGeometries
  84.     Clip4Polygons *clips;    // List of clips
  85.     int clipCapacity;        // # of clips this list can hold
  86.     int firstNondrawnClip;
  87.     int *lastClipInGroup;    // index of the last clip in each group of clips
  88.     // drawn in drawGeometry func.
  89.  
  90.     Bool doDepthTest;           // whether depth testing should be used in the effect
  91.     Bool doLighting;            // whether lighting should be used in the effect
  92.     CorrectPerspective correctPerspective;
  93.     PolygonObject *polygons;    // The polygons in this set
  94.     int nPolygons;
  95.     float thickness;        // Window thickness (depth along z axis)
  96.     int nTotalFrontVertices;    // Total # of polygon vertices on front faces
  97.     float backAndSidesFadeDur;    // How long side and back faces should fade in/out
  98.     float allFadeDuration;    /* Duration of fade out at the end in [0,1] range
  99.                    when all polygons fade out at the same time.
  100.                    If >-1, this overrides fadeDuration in PolygonObject */
  101.  
  102.     Bool includeShadows;        // include shadows in polygon
  103.  
  104.     void (*extraPolygonTransformFunc) (PolygonObject *);
  105. } PolygonSet;
  106.  
  107. typedef struct _Particle
  108. {
  109.     float life;            // particle life
  110.     float fade;            // fade speed
  111.     float width;        // particle width
  112.     float height;        // particle height
  113.     float w_mod;        // particle size modification during life
  114.     float h_mod;        // particle size modification during life
  115.     float r;            // red value
  116.     float g;            // green value
  117.     float b;            // blue value
  118.     float a;            // alpha value
  119.     float x;            // X position
  120.     float y;            // Y position
  121.     float z;            // Z position
  122.     float xi;            // X direction
  123.     float yi;            // Y direction
  124.     float zi;            // Z direction
  125.     float xg;            // X gravity
  126.     float yg;            // Y gravity
  127.     float zg;            // Z gravity
  128.     float xo;            // orginal X position
  129.     float yo;            // orginal Y position
  130.     float zo;            // orginal Z position
  131. } Particle;
  132.  
  133. typedef struct _ParticleSystem
  134. {
  135.     int numParticles;
  136.     Particle *particles;
  137.     float slowdown;
  138.     GLuint tex;
  139.     Bool active;
  140.     int x, y;
  141.     float darken;
  142.     GLuint blendMode;
  143.  
  144.     // Moved from drawParticles to get rid of spurious malloc's
  145.     GLfloat *vertices_cache;
  146.     int vertex_cache_count;
  147.     GLfloat *coords_cache;
  148.     int coords_cache_count;
  149.     GLfloat *colors_cache;
  150.     int color_cache_count;
  151.     GLfloat *dcolors_cache;
  152.     int dcolors_cache_count;
  153. } ParticleSystem;
  154.  
  155. // Window properties for particle or polygon based animation effects
  156. typedef struct _AnimWindowEngineData
  157. {
  158.     // for polygon engine
  159.     PolygonSet *polygonSet;
  160.  
  161.     // for particle engine
  162.     int numPs;
  163.     ParticleSystem *ps;
  164. } AnimWindowEngineData;
  165.  
  166.  
  167. typedef Bool
  168. (*tessellateProc) (CompWindow * w,
  169.            int gridSizeX,
  170.            int gridSizeY,
  171.            float thickness);
  172.  
  173. // Animaddon plugin functions for extension plugins to call
  174. // (only for plugins with effects that use polygon or particle engines).
  175. typedef struct _AnimAddonFunctions {
  176.     AnimWindowEngineData * (*getAnimWindowEngineData) (CompWindow *w);
  177.     int (*getIntenseTimeStep) (CompScreen *s);
  178.  
  179.     // Particle engine functions
  180.     void (*initParticles) (int numParticles,
  181.                ParticleSystem * ps);
  182.     void (*finiParticles) (ParticleSystem * ps);
  183.     void (*drawParticleSystems) (CompWindow *w);
  184.     UpdateBBProc    particlesUpdateBB;
  185.     void (*particlesCleanup) (CompWindow * w);
  186.     Bool (*particlesPrePrepPaintScreen) (CompWindow * w,
  187.                      int msSinceLastPaint);
  188.  
  189.     // Polygon engine functions
  190.     Bool (*polygonsAnimInit) (CompWindow * w);
  191.     void (*polygonsAnimStep) (CompWindow * w, float time);
  192.     void (*polygonsPrePaintWindow) (CompWindow * w);
  193.     void (*polygonsPostPaintWindow) (CompWindow * w);
  194.     void (*polygonsStoreClips) (CompWindow * w,
  195.                 int nClip, BoxPtr pClip,
  196.                 int nMatrix, CompMatrix * matrix);
  197.     void (*polygonsDrawCustomGeometry) (CompWindow * w);
  198.     UpdateBBProc    polygonsUpdateBB;
  199.     Bool (*polygonsPrePreparePaintScreen) (CompWindow *w,
  200.                        int msSinceLastPaint);
  201.     void (*polygonsCleanup) (CompWindow *w);
  202.     void (*polygonsRefresh) (CompWindow *w,
  203.                  Bool animInitialized);
  204.     void (*polygonsDeceleratingAnimStepPolygon) (CompWindow * w,
  205.                      PolygonObject *p,
  206.                      float forwardProgress);
  207.     void (*freePolygonObjects) (PolygonSet * pset);
  208.     tessellateProc    tessellateIntoRectangles;
  209.     tessellateProc    tessellateIntoHexagons;
  210.     tessellateProc    tessellateIntoGlass;
  211. } AnimAddonFunctions;
  212.  
  213. typedef void (*AnimStepPolygonProc) (CompWindow *w,
  214.                      PolygonObject *p,
  215.                      float forwardProgress);
  216.  
  217. typedef struct _AnimAddonEffectProperties
  218. {
  219.     AnimStepPolygonProc animStepPolygonFunc;
  220. } AnimAddonEffectProperties;
  221.  
  222. #endif
  223.  
  224.